home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 1.iso / toolbox / src / demos / OpenGL / insect / gl42ogl.c < prev    next >
C/C++ Source or Header  |  1996-11-11  |  5KB  |  230 lines

  1. /*
  2.  * (c) Copyright 1993, 1994, Silicon Graphics, Inc.
  3.  * ALL RIGHTS RESERVED 
  4.  * Permission to use, copy, modify, and distribute this software for 
  5.  * any purpose and without fee is hereby granted, provided that the above
  6.  * copyright notice appear in all copies and that both the copyright notice
  7.  * and this permission notice appear in supporting documentation, and that 
  8.  * the name of Silicon Graphics, Inc. not be used in advertising
  9.  * or publicity pertaining to distribution of the software without specific,
  10.  * written prior permission. 
  11.  *
  12.  * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
  13.  * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
  14.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
  15.  * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
  16.  * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
  17.  * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
  18.  * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
  19.  * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
  20.  * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
  21.  * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
  22.  * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
  23.  * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
  24.  * 
  25.  * US Government Users Restricted Rights 
  26.  * Use, duplication, or disclosure by the Government is subject to
  27.  * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
  28.  * (c)(1)(ii) of the Rights in Technical Data and Computer Software
  29.  * clause at DFARS 252.227-7013 and/or in similar or successor
  30.  * clauses in the FAR or the DOD or NASA FAR Supplement.
  31.  * Unpublished-- rights reserved under the copyright laws of the
  32.  * United States.  Contractor/manufacturer is Silicon Graphics,
  33.  * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
  34.  *
  35.  * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
  36.  */
  37.  
  38. #undef GEORGE_DEBUG
  39.  
  40. #ifdef GEORGE_DEBUG
  41. #   include <stdio.h>
  42. #endif
  43.  
  44. #include <math.h>
  45. #include <stdio.h>
  46. #include <GL/gl.h>
  47. #include "tk.h"
  48.  
  49. #include "gl42ogl.h"
  50.  
  51. int windX, windY;
  52.  
  53.  
  54. void
  55. getorigin (long *x, long *y) {
  56.     *x = windX;
  57.     *y = windY;
  58. }
  59.  
  60.  
  61. long
  62. getvaluator (Device dev) {
  63. /* gl4: origin in bottom right
  64.  */
  65.     long originX, originY;
  66.     int mouseX, mouseY;
  67.     long val;
  68.  
  69. /* cost in performance in repeated calls,
  70.  *   but hey you want an easy port as possible
  71.  */
  72.     getorigin (&originX, &originY);
  73.     switch (dev) {
  74.     case MOUSEX:
  75.         tkGetMouseLoc (&mouseX, &mouseY);
  76.         val = mouseX + originX;
  77.         break;
  78.  
  79.     case MOUSEY:
  80.         tkGetMouseLoc (&mouseX, &mouseY);
  81.         val = YOUR_SCREEN_MAXY - (mouseY + originY);
  82.         break;
  83.  
  84.     default:
  85.         fprintf (stderr, "unsupported device: %d\n", dev);
  86.         break;
  87.     }
  88.     return (val);
  89.  
  90. }
  91.  
  92.  
  93. #define PI 3.141593
  94.  
  95. void
  96. gl_sincos (GLfloat ang, float *sine, float *cosine) {
  97.     float rads = ang * PI / 1800;
  98.     *sine   = (float)sin (rads);
  99.     *cosine = (float)cos (rads);
  100. }
  101.  
  102.  
  103. void
  104. glGetMatrix (GLfloat mat[]) {
  105.     
  106.     short i;
  107.     GLint mode, ptr;
  108.     static GLfloat tmp[100];
  109.  
  110.     glGetIntegerv (GL_MATRIX_MODE, &mode);
  111.     switch (mode) {
  112.     case GL_MODELVIEW:
  113.         glGetIntegerv (GL_MODELVIEW_STACK_DEPTH, &ptr);
  114.         glGetFloatv (GL_MODELVIEW_MATRIX, tmp);
  115.         break;
  116.     case GL_PROJECTION:
  117.         glGetIntegerv (GL_PROJECTION_STACK_DEPTH, &ptr);
  118.         glGetFloatv (GL_PROJECTION_MATRIX, tmp);
  119.         break;
  120.     case GL_TEXTURE:
  121.         glGetIntegerv (GL_TEXTURE_STACK_DEPTH, &ptr);
  122.         glGetFloatv (GL_TEXTURE_MATRIX, tmp);
  123.         break;
  124.     default:
  125.         fprintf (stderr, "unknown matrix mode: %d\n", mode);
  126.         break;
  127.     }
  128.  
  129.     for (i = 0; i < 16; i++)
  130.     mat[i] = tmp[i];
  131.  
  132. }
  133.  
  134.  
  135. void
  136. mapcolor (Colorindex index, short r, short g, short b) {
  137. /* gl4 -> rgb = [1,255]
  138.  * ogl -> rgb = [0,1]
  139.  */
  140.     tkSetOneColor (index, r/255.0, g/255.0, b/255.0);
  141. }
  142.  
  143.  
  144. void
  145. polf2i (long n, Icoord parray[][2]) {
  146.     register long i;
  147.  
  148.     glBegin (GL_POLYGON);
  149.     for (i = 0; i < n; i++)
  150.     glVertex2iv (parray[i]);
  151.     glEnd();
  152. }
  153.  
  154.  
  155. void
  156. polf2 (long n, Coord parray[][2]) {
  157.     register long i;
  158.  
  159.     glBegin (GL_POLYGON);
  160.     for (i = 0; i < n; i++)
  161.     glVertex2fv (parray[i]);
  162.     glEnd();
  163. }
  164.  
  165.  
  166. void
  167. polfi (long n, Icoord parray[][3]) {
  168.     register long i;
  169.  
  170.     glBegin (GL_POLYGON);
  171.     for (i = 0; i < n; i++)
  172.     glVertex3iv (parray[i]);
  173.     glEnd();
  174. }
  175.  
  176.  
  177. void
  178. polf (long n, Coord parray[][3]) {
  179.     register long i;
  180.  
  181.     glBegin (GL_POLYGON);
  182.     for (i = 0; i < n; i++)
  183.     glVertex3fv (parray[i]);
  184.     glEnd();
  185. }
  186.  
  187.  
  188. void
  189. poly2i (long n, Icoord parray[][2]) {
  190.     register long i;
  191.  
  192.     glBegin (GL_LINE_LOOP);
  193.     for (i = 0; i < n; i++)
  194.     glVertex2iv (parray[i]);
  195.     glEnd();
  196. }
  197.  
  198.  
  199. void
  200. poly2 (long n, Coord parray[][2]) {
  201.     register long i;
  202.  
  203.     glBegin (GL_LINE_LOOP);
  204.     for (i = 0; i < n; i++)
  205.     glVertex2fv (parray[i]);
  206.     glEnd();
  207. }
  208.  
  209.  
  210. void
  211. polyi (long n, Icoord parray[][3]) {
  212.     register long i;
  213.  
  214.     glBegin (GL_LINE_LOOP);
  215.     for (i = 0; i < n; i++)
  216.     glVertex3iv (parray[i]);
  217.     glEnd();
  218. }
  219.  
  220.  
  221. void
  222. poly (long n, Coord parray[][3]) {
  223.     register long i;
  224.  
  225.     glBegin (GL_LINE_LOOP);
  226.     for (i = 0; i < n; i++)
  227.     glVertex3fv (parray[i]);
  228.     glEnd();
  229. }
  230.